﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Collections;
using System.Xml;

namespace Open_MUD.Kernel.Utils
{
    class Config
    {
        private string CONFIG_FOLDER = "\\Config";
        private string END_CONFIG_FILE = ".config.xml";

        private static Config __conf=null;
        private static Hashtable configs;

        public static Config getInstance()
        {
            if (__conf == null)
                __conf = new Config();
            return __conf;
        }

        private Config()
        {
            LoadXML();
        }
        private void LoadXML()
        {
            configs = new Hashtable();
            if (Directory.Exists(Directory.GetCurrentDirectory() + CONFIG_FOLDER))
            {
                DirectoryInfo dconfig = new DirectoryInfo(Directory.GetCurrentDirectory() + CONFIG_FOLDER);
                foreach (FileInfo file in dconfig.GetFiles())
                {
                    String key = file.Name;                    
                    if (key.EndsWith(END_CONFIG_FILE))
                    {
                        key = key.Substring(0, key.Length - END_CONFIG_FILE.Length);
                        XmlDocument xmldoc = new XmlDocument();
                        xmldoc.Load(file.FullName);
                        configs.Add(key, xmldoc );
                    }
                }
            }
        }

        public int getIntValue(String xml, String key)
        {
            if (configs.ContainsKey(xml))
            {
                XmlNode nodo = (configs[xml] as XmlDocument).SelectSingleNode("/config/"+key);
                if (nodo != null)
                    return Int32.Parse(nodo.InnerText);
            }
            throw new MudException("Fallo al recuperar " + key + " de " + xml);
        }

        internal string getStringValue(String xml, String key)
        {
            if (configs.ContainsKey(xml))
            {
                XmlNode nodo = (configs[xml] as XmlDocument).SelectSingleNode("/config/" + key);
                if (nodo != null)
                    return nodo.InnerText;
            }
            throw new MudException("Fallo al recuperar " + key + " de " + xml);
        }
    }
}
